home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
program
/
fpkpas92.zip
/
SRCRTL.ZIP
/
RTL
/
DOS
/
MOVE.PPI
< prev
next >
Wrap
Text File
|
1997-07-01
|
4KB
|
207 lines
procedure MoveLong(selector:word;dst:pointer;cnt:longint);
begin
asm
movw %fs,%dx
movw selector,%ax
movw %ax,%fs
xorl %esi,%esi
movl DST,%edi
movl CNT,%ecx
shrl $0x2,%ecx
MOVE1:
movl %fs:(%esi,%ecx,4),%eax
movl %eax,(%edi,%ecx,4)
decl %ecx
jns MOVE1
movw %dx,%fs
end;
end;
procedure ScreenToMem(Source,Target,Counter:longint);
begin
asm
pushw %ds
movl counter,%ecx
movl %ecx,%ebx
shrl $0x2,%ecx
andl $0x3,%ebx
movl target,%edi
movl source,%esi
addl _WBUFFER,%esi
movw _SEG_WRITE,%ax
movw %ax,%ds
rep
movsl
movl %ebx,%ecx
rep
movsb
popw %ds
end;
end;
procedure MemToScreen(Source,Target,Counter:longint);
begin
asm
movw %es,%dx
movl counter,%ecx
movl %ecx,%ebx
shrl $0x2,%ecx
andl $0x3,%ebx
movl target,%edi
movl source,%esi
addl _WBUFFER,%edi
movw _SEG_WRITE,%ax
movw %ax,%es
rep
movsl
movl %ebx,%ecx
rep
movsb
movw %dx,%es
end;
end;
procedure MemAndScreen(Source,Target,Counter:longint);
begin
asm
pushw %es
movl counter,%ecx
movl %ecx,%ebx
shrl $0x2,%ecx
andl $0x3,%ebx
movl target,%edi
movl source,%esi
movl $4,%edx
addl _WBUFFER,%edi
movw _SEG_WRITE,%ax
movw %ax,%es
mas_lloop:
movl (%esi),%eax
andl %eax,%es:(%edi)
addl %edx,%edi
addl %edx,%esi
decl %ecx
jnz mas_lloop
orl %ebx,%ecx
jz mas_end
mas_bloop:
movb (%esi),%al
andb %al,%es:(%edi)
incl %esi
incl %edi
decl %ecx
jnz mas_bloop
mas_end:
popw %es
end;
end;
procedure MemOrScreen(Source,Target,Counter:longint);
begin
asm
pushw %es
movl counter,%ecx
movl %ecx,%ebx
shrl $0x2,%ecx
andl $0x3,%ebx
movl target,%edi
movl source,%esi
addl _WBUFFER,%edi
movw _SEG_WRITE,%ax
movw %ax,%es
mos_lloop:
movl (%esi),%eax
orl %eax,%es:(%edi)
addl $4,%edi
addl $4,%esi
decl %ecx
jnz mos_lloop
orl %ebx,%ecx
jz mos_end
mos_bloop:
movb (%esi),%al
orb %al,%es:(%edi)
incl %esi
incl %edi
decl %ecx
jnz mos_bloop
mos_end:
popw %es
end;
end;
procedure MemXorScreen(Source,Target,Counter:longint);
begin
asm
movw %es,%dx
movl counter,%ecx
movl %ecx,%ebx
shrl $0x2,%ecx
andl $0x3,%ebx
movl target,%edi
movl source,%esi
addl _WBUFFER,%edi
movw _SEG_WRITE,%ax
movw %ax,%es
jecxz mxs_b
mxs_lloop:
movl (%esi),%eax
xorl %eax,%es:(%edi)
addl $4,%edi
addl $4,%esi
decl %ecx
jnz mxs_lloop
mxs_b:
orl %ebx,%ecx
jz mxs_end
mxs_bloop:
movb (%esi),%al
xorb %al,%es:(%edi)
incl %esi
incl %edi
decl %ecx
jnz mxs_bloop
mxs_end:
movw %dx,%es
end;
end;
procedure MemNotScreen(Source,Target,Counter:longint);
begin
asm
pushw %es
movl counter,%ecx
movl %ecx,%ebx
shrl $0x2,%ecx
andl $0x3,%ebx
movl target,%edi
movl source,%esi
addl _WBUFFER,%edi
movw _SEG_WRITE,%ax
movw %ax,%es
jecxz mns_b
mns_lloop:
movl (%esi),%eax
notl %eax
movl %eax,%es:(%edi)
addl $4,%edi
addl $4,%esi
decl %ecx
jnz mns_lloop
mns_b:
orl %ebx,%ecx
jz mns_end
mns_bloop:
movb (%esi),%al
notb %al
movb %al,%es:(%edi)
incl %esi
incl %edi
decl %ecx
jnz mns_bloop
mns_end:
popw %es
end;
end;